/**
 * @file 处理路由、侧边栏的公共函数
 */

const handleModule = {
    /**
       * 根据后台返回的权限，以及配置好的所有路由，过滤出真实路由
       * @param  {Array} permissionList 后台返回的用户权限列表
       * @param  {Array} allRouter  前端配置好的所有动态路由的集合,需要权限的列表,定义在router.js中
       * @return {Array} 过滤后的路由
       */
    getRouter(permissionList = [], allRouter = []) {
      // permissions 的格式为 ["deploy-manage", "system-log"]
      let permissions = permissionList.reduce((acc, cur) => {
        if (cur.moduleList && cur.moduleList.length > 0) cur = cur.moduleList; //这里其实只做了两层
        return acc.concat(cur);
      }, []).map((v) => v.requestMapping);
      console.log('通过后端返回的路由过滤后的权限列表',permissions)
      return allRouter.filter((item) => permissions.includes(item.meta.permitName));
    },
  

    /**
       * 根据后台返回的权限，生成侧边栏
       * @param  {Array} permissionList  后台返回的用户权限列表,已经过滤掉登录和用户管理等非业务路由
       * @return {Array} sidebarMenu  生成的侧边栏数组
       */
    getSidebarMenu(permissionList = []) { //传入的值是所有需要权限的动态路由
      let sidebarMenu = [];
      console.log('permissionList',permissionList)
      permissionList.forEach((item) => {
        let menuItem = {
          name: item.requestMapping, //侧边栏点击后跳转的路径是由后端返回的requestMapping定义的
          title: item.moduleGroupName,
        };
        menuItem.children = (item.moduleList || []).map((child) => ({
          name: child.requestMapping,
          title: child.moduleName,
        }));
        sidebarMenu.push(menuItem);
      });
      
      return sidebarMenu;
    },
  
    // 返回当前选中的菜单对应的 一级菜单/二级菜单
    getSecondMenu(menuList, to) {
      let secondMenu = [];
      let firstSelectMenu = '';
      menuList.forEach((item) => {
        // 没有子菜单时一级菜单需要返回本身的name
        if (item.name === to.name) {
          firstSelectMenu = item.name;
        }
        // 如果子菜单长度为0直接跳过
        if (item.children.length !== 0) {
          item.children.forEach((data) => {
            // 子菜单中可以找到路由则返回子菜单数组
            if (data.name === to.name) {
              secondMenu = item.children;
              firstSelectMenu = item.name;
            }
          });
        }
      });
      return { secondMenu, firstSelectMenu };
    },
  };
  
  export default handleModule;
  